package com.cargo.base.utils;

import java.text.DecimalFormat;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CheckUtil {
	/************************************判空验证工具类******************************************/	
	/**
	 * 验证列表是否为空
	 * @param list
	 * @return
	 * @throws Exception
	 */
	public static boolean checkObj(List<?> list)throws Exception {
		if(list != null && list.size() > 0){
			return true;
		}
		return false;
	}
	
	/**
	 * 验证列表是否为空
	 * @param
	 * @return
	 * @throws Exception
	 */
	public static boolean checkObj(Set<?> set)throws Exception {
		if(set != null && set.size() > 0){
			return true;
		}
		return false;
	}
	
	/**
	 * 验证字符串是否为空
	 * @param s
	 * @return
	 * @throws Exception
	 */
	public static boolean checkObj(String s)throws Exception {
		if(s != null && s.trim().length() > 0){
			return true;
		}
		return false;
	}
	
	/**
	 * 判断对象是否为空
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public static boolean checkObj(Object obj)throws Exception {
		if(obj != null){
			return true;
		}
		return false;
	}
	
	/***************************************字符串工具类********************************************/
	/**
	 * [判断字符串是否为空]
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isEmpty(String str) {
		if (null == str || "".equals(str.trim())) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * [判断字符串是否不为空]
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isNotEmpty(String str) {
		if (null == str || "".equals(str.trim())) {
			return false;
		} else {
			return true;
		}
	}

	/***************************************手机号邮箱验证工具类********************************************/
	/**
	 * [判断是否是邮箱地址]
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isEmail(String str) {
		String regex = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
		return str.matches(regex);
	}

	/**
	 * 手机号验证
	 * 
	 * @param str
	 * @return 验证通过返回true
	 */
	public static boolean isMobile(String str) {
		Pattern p = null;
		Matcher m = null;
		boolean b = false;
		p = Pattern.compile("^[1][3,4,5,8][0-9]{9}$"); // 验证手机号
		m = p.matcher(str);
		b = m.matches();
		return b;
	}

	/**
	 * 电话号码验证
	 * 
	 * @param str
	 * @return 验证通过返回true
	 */
	public static boolean isTel(String str) {
		Pattern p1 = null, p2 = null;
		Matcher m = null;
		boolean b = false;
		p1 = Pattern.compile("^[0][1-9]{2,3}-[0-9]{5,10}$"); // 验证带区号的
		p2 = Pattern.compile("^[1-9]{1}[0-9]{5,8}$"); // 验证没有区号的
		if (str.length() > 9) {
			m = p1.matcher(str);
			b = m.matches();
		} else {
			m = p2.matcher(str);
			b = m.matches();
		}
		return b;
	}
	
	/***************************************数字工具类********************************************/
	/**
	 * 
	 * isNotNull:验证数值不为空
	 * @param num
	 * @return 
	 * @return :boolean 
	 * @Creator:wizard
	 * @Date:2016年9月19日 下午1:19:17
	 */
	public static boolean isNotNull(Integer num) {
		if (null == num) {
			return false;
		} else {
			return true;
		}
	}
	
	/**
	 * [是否空、或者为0]
	 * 
	 * @param num
	 * @return
	 */
	public static boolean isEmptyOrZero(Integer num) {
		if (null == num || 0 == num) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * [是否空、或者为0]
	 * 
	 * @param num
	 * @return
	 */
	public static boolean isEmptyOrZero(Long num) {
		if (null == num || 0 == num) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * [是否空、或者为0.0]
	 * 
	 * @param num
	 * @return
	 */
	public static boolean isEmptyOrZero(Double num) {
		if (null == num || 0.0 == num) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * [是否不为空、或者为0]
	 * 
	 * @param num
	 * @return
	 */
	public static boolean isNotEmptyOrZero(Integer num) {
		if (null == num || 0 == num) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * [是否不为空、或者为0]
	 * 
	 * @param num
	 * @return
	 */
	public static boolean isNotEmptyOrZero(Long num) {
		if (null == num || 0.0 == num) {
			return false;
		} else {
			return true;
		}
	}
	
	/**
	 * [是否不为空、或者为0]
	 * 
	 * @param num
	 * @return
	 */
	public static boolean isNotEmptyOrZero(Double num) {
		if (null == num || 0 == num) {
			return false;
		} else {
			return true;
		}
	}
	
	/**
	 * [对double类型的数字保留2位小数]
	 * 
	 * @param a
	 * @return
	 */
	public static double get2Double(double a) {
		DecimalFormat df = new DecimalFormat("0.00");
		return new Double(df.format(a).toString());
	}

	/**
	 * [对double类型的数字保留2位小数]
	 * 
	 * @param a
	 * @return
	 */
	public static String doubleTo2String(double a) {
		DecimalFormat df = new DecimalFormat("0.00");
		return df.format(a).toString();
	}
	
	 /**
   * [对double类型的数字保留1位小数]
   * 
   * @param a
   * @return
   */
  public static double get1Double(double a) {
    DecimalFormat df = new DecimalFormat("0.0");
    return new Double(df.format(a).toString());
  }

  /**
   * [对double类型的数字保留1位小数]
   * 
   * @param a
   * @return
   */
  public static String doubleTo1String(double a) {
    DecimalFormat df = new DecimalFormat("0.0");
    return df.format(a).toString();
  }
	
	/**
	 * [判断int类型的数字是否在规定int范围内]
	 * @param current	当前值
	 * @param min		较小值
	 * @param max		较大值，为空默认为无限大
	 * @return
	 */
	public static boolean isBetween(Integer current, Integer min, Integer max){
		return null==max?current>=min:current>=min&&current<=max;
	}
	
	/**
	 * [判断int类型的数字是否在规定double范围内]
	 * @param current	当前值
	 * @param min		较小值
	 * @param max		较大值，为空默认为无限大
	 * @return
	 */
	public static boolean isBetween(Integer current, Double min, Double max){
		return null==max?current>=min:current>=min&&current<=max;
	}
	
	/**
	 * 验证字符串是否包含特殊符号
	 * @param paraments 字符串
	 * @param split 检验自定义特殊符号
	 * @return 
	 * @Creator: wizard
	 * @Date:2016年5月12日 下午1:33:35
	 */
	public static boolean isNotSplit(String paraments, String split){
		if(paraments.contains(split))
			return true;
		else
			return false;
	}
	
}
